package com.example.payserver1040.feignclient;

import com.example.springcloudusercommon.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: 温伟雄
 * @Date: 2021/10/12/18:55
 * @Description:
 */
//user-server是用户服务的服务名字，Feign根据服务名能够在注册中心找到目标服务的通信地址
@FeignClient(value = "user-server",fallbackFactory = UserFeignClientFallbackFactory.class)
public interface UserFeignClient {

    /**
     * 接口中的方法跟用户服务(springcloud-user-server-1020)中的方法一样，其实Feign就是通过客户端接口里面的方法，来决定目标服务的资源路径url，参数以及返回值，这里我们可以直接把要调用的目标服务的controller方法拷贝过来，然后去掉方法体即可。
     *
     * Feign可以根据@FeignClient(“user-server”)找到用户服务，根据方法上的 @RequestMapping(value = “/user/{id}”,method = RequestMethod.GET)找到目标服务的controller的方法 ，我们在使用Feign接口时传入的参数就会作为目标服务controller方法的参数，而返回值就是目标服务controller方法的返回值。
     *
     * 即：服务名要一致 ， url路径要一致 ， 参数要一致 ， 返回值类型要一致。
     * 建议 ：服务名直接去目标服务配置中拷贝 ， 方法直接从目标服务controller中拷贝
     *
     * @param id
     * @return
     */

    //订单服务来调用这个方法
    @RequestMapping(value="/user/{id}",method = RequestMethod.GET)
    User getById(@PathVariable("id")Long id);
}
